//package com.jiezuo.common.sign;
//
//import com.jiezuo.common.exception.BusinessRuntimeException;
//import com.jiezuo.common.util.IpUtil;
//import com.jiezuo.common.util.StringUtil;
//import com.jiezuo.common.util.SystemClock;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Configuration;
//
//import javax.servlet.http.HttpServletRequest;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.TreeMap;
//
///**
// * @description 生成签名, 解析签名
// * @author 庞留杰
// * @date 2020/12/19 9:13
// * @version V1.0
// **/
//@Slf4j
//@Configuration
//public class SignatureGeneration {
//
//    public static String publicKey;
//
//    @Value("${sign.licensee.pubKey}")
//    public void setPublicKey(String publicKey) {
//        this.publicKey = publicKey;
//    }
//
//    public static String privateKey;
//
//    @Value("${sign.licensor.priKey}")
//    public void setPrivateKey(String privateKey) {
//        this.privateKey = privateKey;
//    }
//
//    /**
//     * 功能描述: 生成签名
//     * @author: 庞留杰
//     * @param map
//     * @return: String
//     * @exception Exception
//     * @date: 2020/12/19 9:15
//     */
//    public static String sign(Map map) {
//        if (!StringUtil.isNotEmpty(publicKey)) {
//            throw new BusinessRuntimeException("生成签名失败，请配置公钥");
//        }
//        /* 有时不需要参数
//        if (map.isEmpty()){
//            log.info("生成签名参数为空");
//            return null;
//        }*/
//        Map treeMap = new TreeMap();
//        treeMap.putAll(map);
//        String str = "";
//        for (Object key : treeMap.keySet()) {
//            str += key + "=" + treeMap.get(key) + "&";
//        }
//        //添加公共字段
//        str += "call_time=" + SystemClock.now();//调用时间
//        // String sign = RsaHelper.encryptData(str, publicKey);//生成签名
//        String sign = RSAUtils.encrypt(str, publicKey);//生成签名
//        if (!StringUtil.isNotEmpty(sign)) {
//            throw new BusinessRuntimeException("公钥不合法，请配置有效公钥");
//        }
//        return sign;
//    }
//
//    /**
//     * 功能描述: 解析签名
//     * @author: 庞留杰
//     * @param sign
//     * @return: Map
//     * @exception Exception
//     * @date: 2020/12/19 9:15
//     */
//    public static Map parseSign(HttpServletRequest request, String sign) throws Exception {
//        String uri = request.getRequestURI();
//        String ip = IpUtil.getIp(request);
//        if (!StringUtil.isNotEmpty(privateKey)) {
//            log.error("未授权系统调用平台接口>>>IP：{},调用接口名称：{}", ip, uri);
//            throw new BusinessRuntimeException("您的系统未授权，请联系平台授权");
//        }
//        // String str = RsaHelper.getInstance().decryptData(sign, privateKey);//生成签名
//        String str = RSAUtils.decrypt(sign,privateKey);
//        if (!StringUtil.isNotEmpty(str)) {
//            log.error("签名解析失败>>>IP：{},调用接口名称：{}", ip, uri);
//            throw new BusinessRuntimeException("签名解析失败，请确认你的公钥是否有效");
//        }
//        System.out.println("解密后的签名信息：" + str);
//        //根据逗号截取字符串数组
//        String[] str1 = str.split("&");
//        //创建Map对象
//        Map<String, Object> map = new HashMap<>();
//        //循环加入map集合
//        for (int i = 0; i < str1.length; i++) {
//            //根据":"截取字符串数组
//            String[] str2 = str1[i].split("=");
//            //str2[0]为KEY,str2[1]为值
//            map.put(str2[0], str2.length > 1 ? str2[1] : "");
//        }
//        return map;
//    }
//
//
//}
